const { uploadPath } = require("../config");
const userModel = require("../models/userModel");
const JWT = require("../utils/jwtUtil");
const { receiveUploadedFile } = require("./fileController");

/* 处理注册 */
async function register(username, password) {
    /* 查看用户名是否存在 存在则注册失败 */
    const users = await userModel.getUsers({ username });
    if (users.length) {
        // 履约数据
        return { msg: "注册失败", reason: "用户名已存在" };
    }

    /* 调用模型层的添加用户方法 得到添加的结果 */
    const result = await userModel.addUser({ username, password });

    // 将结果丢还视图层
    return result;
}

/* 处理登录 */
async function login(username, password) {
    // 死等模型层查询用户的结果
    const users = await userModel.getUsers({ username, password });

    /* 只要查询结果不为空数组 即为登录成功 */
    if (users.length) {
        /* 发放Token */
        const token = JWT.generate(users[0]);

        // 向后继续履约
        return { msg: "登录成功", token };
    } else {
        // 向后继续履约
        return { msg: "登录失败", reason: "查无此人" };
    }
}

/* 处理个人中心请求 */
async function getUserDetail(id) {
    const users = await userModel.getUsers({ _id: id });
    if (users.length) {
        return users[0];
    } else {
        return { msg: "查无此人" };
    }
}

/* 修改用户信息 */
async function updateUser0(id, user) {
    const result = await userModel.updateUser(id, user);
    return result;
}

async function updateUser(id, req) {
    let ret = await receiveUploadedFile(req);
    if (ret.err) {
        return ret;
    }

    ret = await userModel.updateUser(id, {
        ...req.body,
        avatar: `/upload/${ret.filename}`,
    });
    return ret;
}

module.exports = {
    register,
    login,
    getUserDetail,
    updateUser,
};
